package org.example.demeter;

import lombok.Data;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;

/**
 * @author
 * @description 迪米特法则
 */
@SpringBootTest
public class Demeter {

    //客户端
    @Test
    public void test() {
        //创建一个SchoolManager对象
        SchoolManager schoolManager = new SchoolManager();
        //输出学院的员工id和学校总部的员工信息
        schoolManager.printAllEmployee(new CollegeManager());
    }
}

//学校总部员工类
@Data
class Employee {
    private String id;
}
//学院的员工类
@Data
class collegeEmployee {
    private String id;
}

//管理学院员工的管理类
class  CollegeManager {
    //返回学院的所有员工
    public List<collegeEmployee> getAllEmployee() {
        List<collegeEmployee> list = new ArrayList<collegeEmployee>();
        for (int i = 0; i < 10; i++) {//这里我们增加了10个员工到list
            collegeEmployee emp = new collegeEmployee();
            emp.setId("学院员工id= " + i);
            list.add(emp);
        }
        return list;
    }
}

//学校管理类

/**
 * 分析
 * 1、SchoolManager类的直接朋友类有哪些Employee、CollegeManager
 * 2、collegeEmployee不是直接朋友，而是一个陌生类，这样违背了迪米特法则
 */
class SchoolManager {
    public List<Employee> getAllEmployee() {
        //返回学校总部的员工
        List<Employee> list = new ArrayList<Employee>();
        for (int i = 0; i < 5; i++) {//这里我们增加了5个员工到list
            Employee emp = new Employee();
            emp.setId("学校总部员工id= " + i);
            list.add(emp);
        }
        return list;
    }

    //该方法完成输出学校总部和学院员工信息(使用)
     void printAllEmployee(CollegeManager sub) {
        //获取到学院员工
         List<collegeEmployee> list1 = sub.getAllEmployee();
         System.out.println("------------学院员工信息---------------");
         for (collegeEmployee e : list1) {
             System.out.println(e.getId());
         }
         //获取学校总部员工
         List<Employee> allEmployee = this.getAllEmployee();
         System.out.println("------------学校总部员工信息---------------");
         for (Employee e : allEmployee) {
             System.out.println(e.getId());
         }
     }
}